XML处理
除了-first和-last命令之外,xtract还有其他元素变体,它们返回所选数据值的变换版本。它还有一些方法可以很容易地将提取的值包装在XML标记中,以便通过xtract进行进一步处理。
数据转换
数字评估命令使用具有相同标签名称的一组数据。例如,-num将计算命名对象的数量(将-element“#Author”快捷方式转换为-num Author)。可以使用-sum添加XML对象中的整数值,并且可以使用-avg计算其算术平均值。选定内容中的字符数由-len返回(-element“%Title”实现为-len Title)。
文本和字符串命令适用于单个字符串值。使用-words将句子分隔为标点符号,或使用-upper将句子转换为大写。 -year命令返回数据中遇到的第一个四位数令牌,因此它可以使用整数Year或半结构化MedlineDate字符串正常工作。将-year应用于“PubDate/*”将检查所有内部对象的值,无论标记名称如何,并且是获取PubMed出版年份的一般解决方案。
通过运行xtract -help可以看到完整的元素变体集。
顺序处理
数据分析经常涉及文本或数字处理的几个连续步骤。例如,检查PubMed摘要随时间的增长需要隔离每个摘要的单个单词,计算每篇文章的单词,按年度过滤结果,然后计算每年的平均单词数。各个操作都受到xtract函数的支持,因此将中间值包装在XML中可以消除对单独脚本执行计算的需要。
对选定日记中发布的文章运行搜索查询,将结果限制为带有摘要的文章,获取单个PMID,以及从本地数据缓存中获取记录:
|
|
返回一个XML PubmedArticleSet,其中包含超过115,000个PubmedArticle记录。下一步将提取出版年份和文章摘要中的单个词。原始XML中的所需字段是:
|
|
将PubmedArticleSet管道化为提取命令的初始版本:
|
|
在单独的行上打印年份和每个单独的抽象单词:
|
|
用XML包装结果
自定义参数使得可以将中间值(例如,每个抽象的单个单词和每篇文章的单词计数)包装回XML格式,因此可以将它们发送到另一个xtract命令以进行下一个处理步骤。将PubmedArticleSet管道化为:
|
|
允许将提取的值写为结构化XML片段(显示为重新格式化以便于阅读):
|
|
-wrp参数是一个方便,它只设置XML对象名称,设置所有适当的自定义参数,如上所示:
|
|
使包装中间值变得容易。
然后将结果传送到下一步,使用-num计算每篇文章摘要中的单词数:
|
|
再次将结果包装为结构化XML:
|
|
使用“>countsByYear.xml”重定向输出会将结果保存在文件中,以用于所有后续处理。
XML子集的选择
xtract -select参数允许按数据值记录子集,例如发布年份。它充当“-if”语句,后跟条件语句,但没有 - 元素,因为它的目的是传递满足条件的所有记录的全部内容。
这比每年运行单独的esearch查询更方便,速度更快,并且可以查看未被Entrez索引的数据元素。它在下面的循环中用于将处理的查询结果限制为一年一次,将相关子集传递给第二个xtract命令:
|
|
将-avg应用于单词count以计算当前年度每篇文章的平均抽象单词数:
|
|
可以通过重定向到文件来保存此结果,也可以将其传送到:
|
|
将数据打印到终端,然后以图形格式显示结果。最后一步应该是:
|
|
删除中间文件。